#ifndef CARD_H
#define CARD_H

#include <QVector>
#include <QDataStream>

class Card
{
public:
    // 花色
    enum CardSuit
    {
        Suit_Begin,
        Diamond,    // 方块
        Club,       // 梅花
        Heart,      // 红桃
        Spade,      // 黑桃
        Suit_End
    };

    // 点数
    enum CardPoint
    {
        Card_Begin,
        Card_3,
        Card_4,
        Card_5,
        Card_6,
        Card_7,
        Card_8,
        Card_9,
        Card_10,
        Card_J,
        Card_Q,
        Card_K,
        Card_A,
        Card_2,
        Card_SJ,  // small joker(小王)
        Card_BJ,  // big joker(大王)
        Card_End
    };

public:
    Card();
    Card(CardPoint point, CardSuit suit);

    // 设置花色
    void setSuit(CardSuit suit);
    // 设置点数
    void setPoint(CardPoint point);

    // 获取花色
    CardSuit getSuit() const;

    // 获取点数
    CardPoint getPoint() const;

    // 添加友元函数
    friend QDataStream& operator <<(QDataStream& in, const Card& card);
    friend QDataStream& operator >>(QDataStream& out, Card& card);

private:
    CardSuit m_suit; // 花色
    CardPoint m_point; // 点数
};

// 对象的比较
bool lessSort(const Card& c1, const Card& c2);
bool greaterSort(const Card& c1, const Card& c2);
bool operator <(const Card& c1, const Card& c2);

// 操作符重载（==）
bool operator ==(const Card& left, const Card& right);

// 重写全局函数 qHash （获取不同扑克牌的哈希值）
uint qHash(const Card& card);

// 定义类的别名
using CardList = QVector<Card>;

#endif // CARD_H
